
package OpenCodes.Persistencia.MySQL.Ciudad;

import OpenCodes.Dominio.Ciudad;
//import OpenCodes.Persistencia.IMapeadorFila;
import OpenCodes.Persistencia.MySQL.RepositorioGenerico;
//import OpenCodes.Persistencia.RepositorioException;
/*
import OpenCodes.Persistencia.UtilidadesDB;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.ArrayList;
 * 
 * */
import OpenCodes.Persistencia.RepositorioException;
import java.sql.ResultSet;
import java.sql.SQLException;
//import java.util.List;
import java.sql.Connection;


/**
 * Implementa las operaciones del repositorio ciudad. 
 * @author: OpenCodes (Nicolas Tenca, Luis Soto)
 * @see ICiudadRepositorio
 * @param Ciudad
 */
public class CiudadRepositorio extends RepositorioGenerico<Ciudad> implements ICiudadRepositorio {
    
    public CiudadRepositorio(Connection connection) {
        super(connection);
    }

    /**
     *
     * Mapear fila devuelve el resultset con las ciudades
     */
    @Override
    public Ciudad mapearFila(ResultSet resultSet) throws SQLException {
        int i = 1; // es el indice de la columna
		// ciudad
		int id = resultSet.getInt(i++);
		String nombre = resultSet.getString(i++);		
        Ciudad ciudad=null;
        ciudad= new Ciudad(id, nombre);
		return ciudad; 
    }

    @Override
    protected String sqlAgregar(Ciudad ciudad) {
        String sql="Insert into ciudad (nombre) values ('" + ciudad.getNombre() + "')" ;
        return sql;

    }

    @Override
    protected String sqlModificar(Ciudad ciudad) {
        String sql="Update ciudad set nombre='" + ciudad.getNombre() + "' where id=" + ciudad.getId() ;
        return sql;

    }

    @Override
    protected String sqlEliminar(Ciudad ciudad) {
        //throw new UnsupportedOperationException("Not supported yet.");
        String sql="Delete from ciudad where id=" + ciudad.getId() ;
        return sql;
    }

    @Override
    protected String sqlObtenerUno(String id) {
       String sql="Select * from ciudad where idciudad=" + id;
       return sql;
       
    }

    @Override
    protected String sqlObtenerTodos() {
         String sql = "Select * from ciudad";
         return sql;
    }
    /*
    @Override
    public List<Ciudad> buscar(String nombre) throws RepositorioException {
    throw new UnsupportedOperationException("Not supported yet.");
    }
     */
    @Override
    protected String sqlObtenerAlgunos(String[] parametrosBusqueda) {
        String sql = "Select * from ciudad where nombre like '%"
                + parametrosBusqueda[0] + "%'" ;
        return sql;
    }

    @Override
    protected String sqlExiste(String[] parametrosChekeo) {
      String sql = "Select id from ciudad where nombre='"
                + parametrosChekeo[0] + "'" ;
        return sql;
    }

    

  
/*
    @Override
    public void agregar(Ciudad ciudad) throws RepositorioException {
       String sql =
			  " INSERT INTO ciudad"
			+ "    (nombre)"
		    + " VALUES"
		    + "    (?)";
        PreparedStatement preparedStatement = null;

        try {
            // persona
            preparedStatement = connection.prepareStatement(sql);
            //preparedStatement.setInt(1, persona.getId());
            preparedStatement.setString(1, ciudad.getNombre());
            preparedStatement.executeUpdate();

        } catch(SQLException e) {
            throw new RepositorioException("Fallo la insercion de la ciudad " + ciudad, e);
        } finally {
            UtilidadesDB.close(preparedStatement);
        }
    }

    @Override
    public Ciudad cargar(int id) throws RepositorioException {
        String sql =
			  " SELECT id"
			+ "     , nombre"
			+ " FROM ciudad "
			+ " WHERE id = ?";
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		try {
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setInt(1, id);
			resultSet = preparedStatement.executeQuery();
			if (resultSet.next()) {
				return mapearFila(resultSet);
			}
			return null;
		} catch (SQLException e) {
			throw new RepositorioException("Error en la carga de Ciudad. ID:" + id, e);
		} finally {
			UtilidadesDB.close(resultSet);
			UtilidadesDB.close(preparedStatement);
		}
    }

    @Override
    public void modificar(Ciudad ciudad) throws RepositorioException {
       String sql =
			  " UPDATE ciudad"
            + "    SET nombre = ?"
			+ " WHERE id = ?";

        PreparedStatement preparedStatement = null;
        try {
           
        	preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, ciudad.getNombre());
            preparedStatement.setInt(2, ciudad.getId());
            preparedStatement.executeUpdate();

        } catch(SQLException e) {
            throw new RepositorioException("Fallo la actualizacion de la ciudad " + ciudad, e);
        } finally {
            UtilidadesDB.close(preparedStatement);
        }
    }

    @Override
    public void eliminar(Ciudad ciudad) throws RepositorioException {
       String sql ="delete from ciudad where id = ?";

		PreparedStatement preparedStatement = null;
        try {
            // Inicia la transacción
            //connection.setAutoCommit(false);

            // elimina la persona
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, ciudad.getId());
            preparedStatement.executeUpdate();

        } catch(SQLException e) {
            throw new RepositorioException("Fallo la eliminacion de la ciudad " + ciudad, e);
        } finally {
            UtilidadesDB.close(preparedStatement);
        }
    }

    @Override
    public List<Ciudad> listarCiudades() throws RepositorioException {
       String sql =
			  " SELECT id"
			+ ",nombre"
			+ " FROM ciudad";

		List<Ciudad> lista = new ArrayList<Ciudad>();
        CallableStatement prcDevolverCiudades = null ;
       	Statement statement = null;
		ResultSet resultSet = null;
		try
        {
            //Obtengo las personas utilizando Procedimientos almacenado
            prcDevolverCiudades = connection.prepareCall("{ call DevolverCiudades() }");
            prcDevolverCiudades.execute();
            resultSet= prcDevolverCiudades.getResultSet();

            //Obtengo las personas utilizando Select Comun
			//statement = connection.createStatement();
			//statement.execute(sql);
			//resultSet = statement.getResultSet();
			while (resultSet.next()) {
				Ciudad ciudad = mapearFila(resultSet);
				lista.add(ciudad);

			}
			return lista;
		} catch (SQLException e) {
			throw new RepositorioException("Falló la carga de la lista", e);
		} finally {
			UtilidadesDB.close(resultSet);
			UtilidadesDB.close(statement);
		}
    }

    @Override
    public Ciudad mapearFila(ResultSet resultado) throws SQLException {
        int i = 1;
		// persona
		int id = resultado.getInt(i++);
		String nombre = resultado.getString(i++);
		
		return new Ciudad(id, nombre);
    }
*/

}
